Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.04.2016, 08:44
Аспирант
Отправить личное сообщение для Salvat Посмотреть профиль Найти все сообщения от Salvat
 
Регистрация: 22.02.2016
Сообщений: 98

POST для двух элементов.
Здравствуйте.
Имеется такой код на php который через цикл вывод данные из MySQl и раставляет номера одному из input'ov.
while($rs_info = mysql_fetch_assoc($info_mess)){
                                                $stena_group .= "<a href='group_room.php?id=".$id."&group=".$gr_admin."&room=".$gr_id."'>Название группы: <b>" . $info_name . "</a></b>
                                                <br/><a href='profile.php?id=".$gr_admin."'>Администратор: <b>" .
                                                 $rs_info['user_first_name'] . "&nbsp;" . $rs_info['user_last_name'] .
                                                "</b></a><br/>Сообщение: " . $rs_info['group_messages'] . "<br/>" . $rs_info['date'] . "<br/>
                                                <form id='submit_wall' >
                                                <p><input type='text' name='comment' id='".$rs_info['id']."' value='' style='height:100p' /></p>
                                                <p> <input type=hidden' name='messageid' id='".$rs_info['id']."' value='".$rs_info['id']."'></p>";
                                                
                                                  $stena_group .='<p><a href="javascript:void(0);" onclick="comment( document.getElementById('.$rs_info['id'].').value );">
                                                  Отправить</a> </p>
                                                </form><br/><br />';
 
 
                                
 
                                                
                                                 
                                            }

Если нажать "Отправить", должна отправляться информация на jquery скрипт такого содержания

function comment(text){
    $.ajax({
        type: "POST",
        url: "profile.php",
        data:"comment=" + text,
        success: function(){
            $("ul#wall_group").prepend("<li style=\"display: none;\">"+ text "</li>");
            $("ul#wall_group li:first-child").fadeIn();
            }
        });
    return false;
};

Таким образом я отправляю данные одного из input'a
<p><input type='text' name='comment' id='".$rs_info['id']."' value='' style='height:100p' /></p>
                                                <p> <input type='hidden' name='messageid' id='".$rs_info['id']."' value='".$rs_info['id']."'></p>"

В данном случае первого, name='comment'. Мне необходимо отправлять данные сразу же двух input'ov. Подскажите, пожалуйста, как это реализовать. Отправить данные сразу с двух. Если что не так объяснил прошу сильно не пинать. Заранее спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 24.04.2016, 09:25
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

function comment(text){

$(function() {
    $('#submit_wall').submit(function(e) {
        e.preventDefault();
            $.ajax({
                ....
               data: $(this).serialise(),
               ....
    });
});


<a href="javascript:void(0);" onclick="comment( document.getElementById('.$rs_info['id'].').value );">
Отправить</a>
- заменить на кнопку отправления формы
Ответить с цитированием
  #3 (permalink)  
Старый 24.04.2016, 09:48
Аспирант
Отправить личное сообщение для Salvat Посмотреть профиль Найти все сообщения от Salvat
 
Регистрация: 22.02.2016
Сообщений: 98

Заменил на
<input type="submit" value="send"/> пробовал с button, страница перезагружается.
$(function() {
	$('#submit_wall').submit(function(e) {

	        e.preventDefault();
			$.ajax({
				type: "POST",
				url: "profile.php",
				data: $(this).serialise(),
				success: function(){
					$("ul#wall_group").prepend("<li style=\"display: none;\">"+ e +"</li>");
					$("ul#wall_group li:first-child").fadeIn();
				}
			});
		return false;
};
Ответить с цитированием
  #4 (permalink)  
Старый 24.04.2016, 10:31
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

serialise() - допустил ошибку я, правильно serialize()

return false; - это удалить, отменяет действие по умолчанию (отправку формы непосредственно) e.preventDefault();

$(function() { //обработчик события загрузки документа - у вас ошибка
    $('#submit_wall').submit(function(e) { //обработчик onsubmit формы  - у вас ошибка
        e.preventDefault();
        $.ajax({
            type: "POST",
            url: "profile.php",
            data: $(this).serialize(),
            success: function(d){
                if(!!d) alert(d) //данные ответа в d, а вы откуда их пытаетесь получить?
            }
        });
    }); //тут вторая ошибка
});//тут первая ошибка
Ответить с цитированием
  #5 (permalink)  
Старый 24.04.2016, 11:11
Аспирант
Отправить личное сообщение для Salvat Посмотреть профиль Найти все сообщения от Salvat
 
Регистрация: 22.02.2016
Сообщений: 98

Цитата:
а вы откуда их пытаетесь получить?
С форм которые создает php код через цикл while.
Ответить с цитированием
  #6 (permalink)  
Старый 24.04.2016, 11:14
Аспирант
Отправить личное сообщение для Salvat Посмотреть профиль Найти все сообщения от Salvat
 
Регистрация: 22.02.2016
Сообщений: 98

<form id='submit_wall' >
07
	                                                <p><input type='text' name='comment' id='".$rs_info['id']."' value='' style='height:100p' /></p>
08
	                                                <p> <input type=hidden' name='messageid' id='".$rs_info['id']."' value='".$rs_info['id']."'></p>";
09
	                                                 
10
	                                                  $stena_group .='<p><a href="javascript:void(0);" onclick="comment( document.getElementById('.$rs_info['id'].').value );">
11
	                                                  Отправить</a> </p>
12
	                                                </form>
Ответить с цитированием
  #7 (permalink)  
Старый 24.04.2016, 11:21
Аспирант
Отправить личное сообщение для Salvat Посмотреть профиль Найти все сообщения от Salvat
 
Регистрация: 22.02.2016
Сообщений: 98

Я в jquery почти не разбираюсь. Пишу на php в основном. Тот пример который привел написал только для одного инпута, мне бы для двух. Но этот код необходим.
Ответить с цитированием
  #8 (permalink)  
Старый 24.04.2016, 11:27
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

А причем тут php-код, если $.ajax, это асинхронный запрос и работает после того, как страница, а значит и сформированная форма уже отдана клиенту?

Ajax получает данные из запрашиваемого серверного сценария указанного в url, а данные возвращенные им возвращаются в переменной объявленной в success функции, и в моем примере это d.

Вы же взяли мой пример и делаете следующее:

prepend("<li style=\"display: none;\">"+ e +"</li>")

а переменная e в моем примере и объявленная здесь:

('#submit_wall').submit(function(e)

это есть объект события: Object { originalEvent=Event submit, type="submit", ...}

И вообще, что есть такое $rs_info['id'], зачем скрытое поле для его передачи?

PS. Учитывайте следующее - пример написан для случая, когда форма отдается клиенту сразу, а асинхронный запрос клиента запрашивает сервер только о полях и помещает возвращенные в форму уже существующую на странице. Если же ваша логика возвращает форму, которая помещается (а значит замещает уже существующую) на страницу, то код примера работать не будет, ибо обработчик события ее отправки установлен только на ее первую "копию".

Последний раз редактировалось laimas, 24.04.2016 в 11:40.
Ответить с цитированием
  #9 (permalink)  
Старый 24.04.2016, 11:39
Аспирант
Отправить личное сообщение для Salvat Посмотреть профиль Найти все сообщения от Salvat
 
Регистрация: 22.02.2016
Сообщений: 98

Цитата:
$rs_info['id']
Это номер сообщения, то есть, человек оставляет комментарий, он отображается, записывается в базу данных и еще необходим номер сообщения чтобы построить всю цепочку диалога. Номер как бы пользователю не к чему.
Ответить с цитированием
  #10 (permalink)  
Старый 24.04.2016, 11:57
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Salvat
Это номер сообщения
Если это идентификатор сообщения по которому нужно связать поля формы, то скрытого поля не требуется. Форма это коллекция элементов, а значит массив, ключами которого на сервере будут имена. При этом поля формы можно именовать так, что массив будет не однономерный, а многомерный.

Как именно именовать, это зависит от того как удобнее будет на сервер обрабатывать полученные данные, имеется ввиду группировка или по ключам, или по именам полей sql-таблицы.

Например: пусть из СУБД выбираются данные - идентификатор сообщения, имя автора, сообщение, дата. При этом выборка ни одного, а сообщений за некий период. Можно именовать поля так:

<input name="data[1]['mess']" value="aaa" />
<input name="data[1]['name']" value="bbb" />
<input name="data[1]['date']" value="12.3.2015" />
<input name="data[2]['mess']" value="ccc" />
<input name="data[2]['name']" value="ddd" />
<input name="data[2]['date']" value="13.3.2015" />


где 1 и 2, это идентификаторы сообщений, и сервер получит следующий массив:

Код:
Array
(
    [data] => Array
        (
            [1] => Array
                (
                    ['mess'] => aaa
                    ['name'] => bbb
                    ['date'] => 12.3.2015
                )

            [2] => Array
                (
                    ['mess'] => ccc
                    ['name'] => ddd
                    ['date'] => 13.3.2015
                )

        )

)
а можно так:

<input name="mess[1]" value="aaa" />
<input name="name[1]" value="bbb" />
<input name="date[1]" value="12.3.2015" />
<input name="mess[2]" value="ccc" />
<input name="name[2]" value="ddd" />
<input name="date[2]" value="13.3.2015" />


в этом случае массив будет следующий:

Код:
Array
(
    [mess] => Array
        (
            [1] => aaa
            [2] => ccc
        )

    [name] => Array
        (
            [1] => bbb
            [2] => ddd
        )

    [date] => Array
        (
            [1] => 12.3.2015
            [2] => 13.3.2015
        )

)
Как видите скрытые поля для передачи ID совсем не требуются - в первом случае все данные по каждому сообщению сгруппированы под первичным ключом, идентификатору сообщения, а во втором случае первичными ключами являются имена данных, а их вложение это массив, где под ключом идентификатора сообщения содержится значение данных.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обработчик событий для динамически добавленных элементов Tecvid Events/DOM/Window 28 25.06.2018 13:49
Алгоритм для слияния элементов массива с datetime romapost Общие вопросы Javascript 29 15.07.2015 21:59
Двойной клик для новых элементов SKLNSK jQuery 1 02.03.2015 22:31
Имитация элемента label не для элементов формы Jeremen Events/DOM/Window 2 09.01.2015 21:25
TreeStore, стили для элементов дерева. Black_Prince ExtJS 1 26.09.2011 13:33